package 子串.和为K的子数组;

import utils.Utils;

import java.util.HashMap;
import java.util.Map;

// 前缀和
// num = 1 2 3
// 前缀和数组 pre =  1 3 6
// pre[j] - pre[i] = k 说明num[i] 到 num[j] 和为k
public class Solution {
    public static int subarraySum(int[] nums, int k) {
        int count = 0;
        int pre = 0;
        Map<Integer,Integer> map = new HashMap<>();
        map.put(0,1);
        for(int x : nums){
            pre += x;
            if(map.containsKey(pre - k)){
                count+=map.get(pre - k);
            }
            map.put(pre,map.getOrDefault(pre,0)+1);
        }

        return count;
    }

    public static void main(String[] args) {
       int[] nums = {1,2,3};
       int k = 3;
       Utils.printInt(subarraySum(nums,k));

    }
}
